/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2001 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.lib.ddl.impl;
import java.util.*;
import java.sql.*;
import java.text.ParseException;
import org.netbeans.lib.ddl.*;
import org.netbeans.lib.ddl.util.*;
/**
* Argument of procedure. Encapsulates name, type (in/out) and datatype.
*
* @author Slavek Psenicka
*/
public class ProcedureArgument implements Argument
{
/** Argument name */
private String name;
/** Argument type */
private int type;
/** Argument datatype */
private int dtype;
/** Format */
private String format;
/** Additional properties
* @associates Object*/
private Map addprops;
public static String getArgumentTypeName(int type)
{
String typename = null;
switch (type) {
case java.sql.DatabaseMetaData.procedureColumnIn: typename = "IN"; break;
case java.sql.DatabaseMetaData.procedureColumnOut: typename = "OUT"; break;
case java.sql.DatabaseMetaData.procedureColumnInOut: typename = "INOUT"; break;
}
return typename;
}
/** Returns name */
public String getName()
{
return name;
}
/** Sets name */
public void setName(String aname)
{
name = aname;
}
/** Returns name of column */
public String getFormat()
{
return format;
}
/** Sets name of column */
public void setFormat(String fmt)
{
format = fmt;
}
/** Returns general property */
public Object getProperty(String pname)
{
return addprops.get(pname);
}
/** Sets general property */
public void setProperty(String pname, Object pval)
{
if (addprops == null) addprops = new HashMap();
addprops.put(pname, pval);
}
/** Describes type of argument: in, out, in/out or return value
* of procedure. Particular values you can find in DatabaseMetadata;
*/
public int getType()
{
return type;
}
/** Translates numeric representation of type into IN/OUT/INOUT strings.
*/
public String getTypeName()
{
return getArgumentTypeName(type);
}
/** Sets type of argument */
public void setType(int atype)
{
type = atype;
}
/** Returns datatype of argument */
public int getDataType()
{
return dtype;
}
/** Sets datatype of argument */
public void setDataType(int atype)
{
dtype = atype;
}
/**
* Returns properties and it's values supported by this object.
* argument.name Name of argument
* argument.type Type of argument
* argument.datatype Datatype of argument
* Throws DDLException if object name is not specified.
*/
public Map getColumnProperties(AbstractCommand cmd)
throws DDLException
{
HashMap args = new HashMap();
DatabaseSpecification spec = cmd.getSpecification();
Map typemap = (Map)spec.getProperties().get("ProcedureArgumentMap");
String typename = (String)typemap.get(getArgumentTypeName(type));
args.put("argument.name", name);
args.put("argument.type", typename);
args.put("argument.datatype", spec.getType(dtype));
return args;
}
/**
* Returns full string representation of argument.
*/
public String getCommand(CreateProcedure cmd)
throws DDLException
{
Map cprops;
if (format == null) throw new DDLException("no format specified");
try {
cprops = getColumnProperties(cmd);
return CommandFormatter.format(format, cprops);
} catch (Exception e) {
throw new DDLException(e.getMessage());
}
}
}
/*
* <<Log>>
* 4 Gandalf 1.3 10/22/99 Ian Formanek NO SEMANTIC CHANGE - Sun
* Microsystems Copyright in File Comment
* 3 Gandalf 1.2 9/10/99 Slavek Psenicka
* 2 Gandalf 1.1 4/23/99 Slavek Psenicka new version
* 1 Gandalf 1.0 4/6/99 Slavek Psenicka
* $
*/